GdkCursor: Don't leak a cairo surface
authorDavid Mansfield <gnome-bugzilla@dm.cobite.com>
Tue, 6 May 2014 18:50:00 +0000 (18:50 +0000)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 7 May 2014 23:29:56 +0000 (19:29 -0400)
The function gdk_cursor_new_from_pixbuf creates a cairo surface
to pass to its backend implementation, but doesn't destroy it
afterwards.
https://bugzilla.gnome.org/show_bug.cgi?id=729670

gdk/gdkcursor.c

index 914d2fbec4717527f5ba326200f0a30175bb76ff..af2de2a9d48fb85e95e34c371ae33dcbbf2125f9 100644 (file)
@@ -318,6 +318,7 @@ gdk_cursor_new_from_pixbuf (GdkDisplay *display,
   const char *option;
   char *end;
   gint64 value;
+  GdkCursor *cursor;
  
   g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
   g_return_val_if_fail (GDK_IS_PIXBUF (pixbuf), NULL);
@@ -346,7 +347,11 @@ gdk_cursor_new_from_pixbuf (GdkDisplay *display,
 
   surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, 1, NULL);
   
-  return GDK_DISPLAY_GET_CLASS (display)->get_cursor_for_surface (display, surface, x, y);
+  cursor = GDK_DISPLAY_GET_CLASS (display)->get_cursor_for_surface (display, surface, x, y);
+
+  cairo_surface_destroy (surface);
+
+  return cursor;
 }
 
 /**